package com.sky.task;

import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * POI读写excel测试
 */
public class TestPOIStudy {
    /**
     * Excel的组成：
     *     excel文件----->工作簿（文件）对象
     *     excel里面可以有很多个Sheet表 ----->工作表对象
     *     Sheet表里有很多行 --->行对象
     *     行里面有很多个单元格 --->单元格对象
     */
    // 需求：通过POI写入数据到指定的excel文件中

    public  void testWrite() throws IOException {
        //1.通过POI创建工作簿（文件）对象 --excel对象
        XSSFWorkbook workbook = new XSSFWorkbook();

        //2.通过 XSSFWorkbook 创建sheet表
        XSSFSheet sheet = workbook.createSheet("itcast");

        //3. 通过XSSFSheet 创建行对象Row,下标从0开始，创建第一行就写0
        XSSFRow row = sheet.createRow(0);
        //4.通过XSSFRow  创建单元格，并往格子申请填充数据
        row.createCell(0).setCellValue("姓名");
        row.createCell(1).setCellValue("爱好");

        //5. 将excel文件写出到指定的文件中
        FileOutputStream fos=new FileOutputStream("d:\\demo.xlsx");
        workbook.write(fos);
        System.out.println("写入成功");
        //6.释放资源
        fos.close();
        workbook.close();


    }
    // 需求：通过POI写入数据到指定的excel文件中 ----基于模板写入

    public  void testWrite2() throws IOException {
        //1.通过POI获取工作簿（文件）对象 --excel对象

        FileInputStream fis =new FileInputStream("d:\\demo.xlsx");
        XSSFWorkbook workbook = new XSSFWorkbook(fis);
        //2.通过 XSSFWorkbook 获取sheet表
        XSSFSheet sheet = workbook.getSheet("itcast");

        //3. 通过XSSFSheet 创建行对象Row,下标从0开始，创建第一行就写0
        XSSFRow row = sheet.getRow(0);
        //4.通过XSSFRow  获取单元格，并往格子申请填充数据
        row.getCell(0).setCellValue("姓名");
        row.getCell(1).setCellValue("爱好");

        XSSFRow row1 = sheet.getRow(1);
        //4.通过XSSFRow  获取单元格，并往格子申请填充数据
        row1.getCell(0).setCellValue("张三");
        row1.getCell(1).setCellValue("篮球");

        //5. 将excel文件写出到指定的文件中
        FileOutputStream  fos=new FileOutputStream("d:\\demo.xlsx");
        workbook.write(fos);
        System.out.println("写入成功");
        //6.释放资源
        fos.close();
        workbook.close();


    }


    // 需求：通过POI读取磁盘中指定的excel文件到Java内存中，并输出到控制台中
    public void testRead() throws IOException {
        //1.基于Excel文件 --->通过POI获取工作簿文件对象  ---excel对象
        FileInputStream fis = new FileInputStream("d:\\demo.xlsx");
        XSSFWorkbook workbook = new XSSFWorkbook(fis);

        //2.通过XSSFWorkbook 获取sheet对象
        XSSFSheet sheet = workbook.getSheet("itcast");
      /*  //3. 通过XSSFSheet 获取行对象Row,下标从0开始，创建第一行就写0
        XSSFRow row = sheet.getRow(0);

        //4通过row获取单元格数据
        String name = row.getCell(0).getStringCellValue();
        String hobby = row.getCell(1).getStringCellValue();*/
        int firstRowNum = sheet.getFirstRowNum();
        int lastRowNum = sheet.getLastRowNum();
        System.out.println("firstRowNum = " + firstRowNum);
        System.out.println("lastRowNum = " + lastRowNum);
        for(int i = firstRowNum; i <= lastRowNum; i++){
            XSSFRow row = sheet.getRow(i);
            String name = row.getCell(0).getStringCellValue();
            String hobby = row.getCell(1).getStringCellValue();
            System.out.println(name + " | " + hobby);
        }

        //5.将获取到的内容输出到控制台
        //  System.out.println(name + " | " + hobby);

        //6.释放资源
        fis.close();
        workbook.close();
    }
}
